package com.xiaolong.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.util.Random;

public class ValidateCodeUtil {
	
	/**
     * 画验证码字符串中单个字符
     * 
     * @param g
     *            图像上下文
     * @param width
     *            字符所占宽度
     * @param height
     *            字符所占高度
     * @param str
     *            待绘制字符串
     */
    public static void drawString(Graphics2D g, int width, int height, String str) {
        Random rand = new Random();
        // 随机生成字符旋转角度(-30~30度)
        int degree = rand.nextInt(60);
        if (degree > 30)
            degree = 30 - degree;
        // 设置字体颜色
        g.setColor(getRandomColor(0, 80));
        g.setFont(new Font("楷体",Font.BOLD,24));
        // 转换 Graphics2D
        Graphics2D g2 = (Graphics2D) g.create();
        // 平移原点到图形环境的中心 ,这个方法的作用实际上就是将字符串移动到某一个位置
        g2.translate(width + rand.nextInt(5), height + rand.nextInt(5));
        // 旋转文本
        g2.rotate(degree * Math.PI / 180);
        // 画文本，特别需要注意的是,这里的画笔已经具有了上次指定的一个位置,所以这里指定的其实是一个相对位置
        g2.drawString(str, 0, 0);
    }
	
	/**
     * 获取随机颜色
     * 
     * @param minimum
     *            颜色下限值
     * @param maximum
     *            颜色上限值
     * @return 随机颜色对象
     */
    public static Color getRandomColor(int minimum, int maximum) {
        if (minimum > maximum) {
            int tmp = minimum;
            minimum = maximum;
            maximum = tmp;
        }
        if (maximum > 255)
            maximum = 255;
        if (minimum < 0)
            minimum = 0;

        int r = minimum + (int) (Math.random() * (maximum - minimum));
        int g = minimum + (int) (Math.random() * (maximum - minimum));
        int b = minimum + (int) (Math.random() * (maximum - minimum));

        return new Color(r, g, b);
    }
    
    /**
     * 画随机干扰线
     * 
     * @param g
     *            画笔（图像上下文）
     * @param count
     *            干扰线条数
     */
    public static void drawLine(Graphics2D g, int count,int width,int height) {
        Random rand = new Random();
        // 循环绘制每条干扰线
        for (int i = 0; i < count; i++) {
            // 设置线条随机颜色
            g.setColor(getRandomColor(180, 200));
            // 生成随机线条起点终点坐标点
            int x1 = rand.nextInt(width);
            int y1 = rand.nextInt(height);
            int x2 = rand.nextInt(width);
            int y2 = rand.nextInt(height);
            // 画线条
            g.drawLine(x1, y1, x2, y2);
        }
    }
}
